/**
 * 验证服务器有效性的模块
 * @returns {Function}
 */
// 一、验证服务器的有效性
/**
 * 1.微信服务器知道开发者服务器是哪个？
 *      测试号管理页面上填写url开发者服务器地址
 *      使用ngrok内网穿透，将本地端口号开启的服务映射外网跨域访问的一个网址
 *      ngrok http 3000
 * 2.开发者服务器-验证消息是否来自于微信服务器
 *      目的：计算得出signature微信加密签名，和微信传递过来的signature进行对比
 *      1.将参与微信加密签名的三个参数：timestamp,nonce,token 组合在一起，按照字典序排序并组合在一起形成一个数组
 *      2.将数组所有参数拼接成一个字符串，进行sha1加密
 *      3.加密完成就生成一个signature，和微信发送过来的进行对比，
 *          如果一样，说明信息来自于微信服务器，返回echostr给微信服务器
 *          如果不一样，返回error
 */

// 引入sha1模块
const sha1 = require('sha1');
// 引入config模块
const config = require('../config')

module.exports = () => {

    return (req, res, next) => {
        // 微信服务器提交的参数
        console.log(req.query);
        /*
         {  signature: '5337c1185d80f738f8b4510f43d4ce508a355bfb', 微信加密签名
            echostr: '8639554097846919165', 微信的随机字符串
            timestamp: '1541573117', 微信的发送请求的时间戳
            nonce: '1610640023'  微信的随机数字
          }
         */
        const {signature, echostr, timestamp, nonce} = req.query;
        const {token} = config;
        const arr = [timestamp, nonce, token];
        const arrSort = arr.sort();
        console.log(arrSort);
        const str = arr.join('');
        const sha1Str = sha1(str);
        console.log(sha1Str);
        if (sha1Str === signature) {
            res.send(echostr);
        } else {
            res.end('error');
        }
    };

}